package sms

import (
	"github.com/gin-gonic/gin"

	"goskeleton/app/core/container"
	"goskeleton/app/global/consts"
	"goskeleton/app/http/controller"
	"goskeleton/app/http/validator/core/data_transfer"
	"goskeleton/app/model"
	"goskeleton/app/utils/response"
	"goskeleton/routers"
)

type TextSms struct {
	Phones   []string        `json:"phones"   binding:"required,max=255"`
	Content  string          `json:"content"  binding:"required,max=255"`
	AtTime   model.LocalTime `json:"at-time"  binding:"omitempty"`
	Priority int             `json:"priority" binding:"omitempty,lte=9,gte=0"`
}

func (ts TextSms) CheckParams(ctx *gin.Context) {
	// 1.先按照验证器提供的基本语法，基本可以校验90%以上的不合格参数
	if err := ctx.ShouldBindJSON(&ts); err != nil {
		// 将表单参数验证器出现的错误直接交给错误翻译器统一处理即可
		response.ValidatorError(ctx, err)
		return
	}

	// 该函数主要是将绑定的数据以 键=>值 形式直接传递给下一步（控制器）
	if data_transfer.DataAddContext(&ts, consts.ValidatorPrefix, ctx) == nil {
		response.ErrorSystem(ctx, "文本短信验证器json化失败", "")
	} else {
		// 验证完成，调用控制器,并将验证器成员(字段)递给控制器，保持上下文数据一致性
		value := container.CreateContainersFactory().Get(consts.ControllerPreFix + routers.KeySendTextSms)
		fun, ok := value.(controller.Controller)
		if ok {
			fun(ctx)
		} else {
			// TODO 异常处理
		}
	}
}
